package com.south.base.test.arithmetic;

import org.junit.Assert;
import org.junit.Test;

/**
 * 把数字翻译成字符串
 * @author Administrator
 * @date 2020/6/9 9:24
 */
public class TranslateNum {
    /**
     * 给定一个数字，我们按照如下规则把它翻译为字符串：
     * 0 翻译成 “a” ，1 翻译成 “b”，……，11 翻译成 “l”，……，25 翻译成 “z”。
     * 一个数字可能有多个翻译。
     * 计算一个数字有多少种不同的翻译方法。
     */
    @Test
    public void translateNum() {
        Assert.assertEquals(5, translateNum(12258));
        Assert.assertEquals(3, translateNum(220));
    }

    public int translateNum(int num) {
        int[] res = new int[32];
        res[0] = 1;
        res[1] = 1;
        int pre = Integer.MAX_VALUE;
        for (int i = 2; i < 32; i++) {
            int mode = num % 10;
            num = num / 10;
            if (mode > 0 && ((mode < 2 && pre < 10) || (mode == 2 && pre < 6))) {
                res[i] = res[i - 1] + res[i - 2];
            } else {
                res[i] = res[i - 1];
            }
            pre = mode;
        }
        return res[res.length - 1];
    }
}
